/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.escom.administracionperfiles.correo;



import com.escom.administracion.dao.ServidorCorreoDAO;
import com.escom.administracionperfiles.constants.Constants;
import com.escom.administracionperfiles.hbm.dto.Propiedades;
import com.escom.administracionperfiles.hbm.dto.ServidorCorreoConf;
import com.escom.administracion.generador.html.GeneradorHTML;
import com.escom.cliente.exception.DAOException;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;



public class ProcesoJMail implements ProcesoJMailDAO,Serializable{

    private ServidorCorreoDAO sConfFacade;
    private List<Propiedades> listPropiedades;



    private void enviaCorreo(MensajeCorreoDTO mensaje) throws DAOException{

        ServidorCorreoConf serverMail=sConfFacade.find(2);
        listPropiedades=new ArrayList<Propiedades>(serverMail.getPropiedadeses());
        Properties props = new Properties();
        for(Propiedades propiedad:listPropiedades)
         props.put(propiedad.getLlave(),propiedad.getValor());
         Session session = Session.getInstance(props,new PopupAuthenticator(serverMail.getUsuario(),serverMail.getContrasenia()));
         session.setDebug(true);
       
        MimeMessage msg = new MimeMessage(session);
        

        try {
            msg.setSubject(mensaje.getAsunto());
            msg.setFrom(new InternetAddress(serverMail.getUsuario()));

            InternetAddress direcciones=null;
           for(String destinatario:mensaje.getDestinatarioList()){
               direcciones=new InternetAddress(destinatario);
               msg.setRecipient(Message.RecipientType.TO, direcciones);
              
                Multipart multipart = new MimeMultipart();
                BodyPart messageBodyPart = new MimeBodyPart();

                messageBodyPart.setContent(mensaje.getCuerpo(), mensaje.getTipoMensaje());

                multipart.addBodyPart(messageBodyPart);

            for(String adjunto:mensaje.getAdjuntoList()){
                File f = new File(adjunto);
                DataSource source = new FileDataSource(f);
                messageBodyPart = new MimeBodyPart();
                messageBodyPart.setDataHandler(new DataHandler(source));
                messageBodyPart.setFileName(f.getName());
                multipart.addBodyPart(messageBodyPart);
            }

            msg.setContent(multipart);
            try{
            Transport.send(msg);
               }catch(Exception e){
                  // e.printStackTrace();
                 System.out.println(e);
               }



           }
//           FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Correos Enviados con exito", ""));
        } catch (MessagingException ex) {
            System.out.println(ex);

        }
         
    }


    
    @Override
    public void enviarCorreo(String Asunto,String Cuerpo,List<String> correos) throws DAOException {
    MensajeCorreoDTO mensaje = new MensajeCorreoDTO();
    mensaje.setAsunto(Asunto);

   // String cadena="<html><head></head><body><p>"+Cuerpo+"</p></body></html>";
    mensaje.setCuerpo(Cuerpo);
    //mensaje.setAdjuntoList(c);
    
    for (String s : correos) {
    mensaje.getDestinatarioList().add(s);
        }
    
    mensaje.setTipoMensaje("text/html");
    enviaCorreo(mensaje);
    }
    public void enviaCorreo(MensajeCorreoDTO mensaje,Map<EnumTokensMail,String> tokensValor) throws DAOException{
        enviaCorreo(mensaje);
    }

    
    private String query=null,baseURL;

    private StringBuffer prepareUrl(String ContextoPath){
         StringBuffer bf=new StringBuffer();
         bf.append("http://");
        // buffer.append("localhost:8080");
         bf.append("www.libreria-tfjfa.com");
         bf.append( ContextoPath);
         bf.append("/faces/login/Create.xhtml");
         return bf;
    }
    private StringBuffer buffer=null;

    public ServidorCorreoDAO getsConfFacade() {
        return sConfFacade;
    }

    public void setsConfFacade(ServidorCorreoDAO sConfFacade) {
        this.sConfFacade = sConfFacade;
    }

    @Override
    public void enviarCorreoOlvideDatos(String correo,String boleta, String password) throws DAOException{
       List<String> clientes=new ArrayList<String>();
       GeneradorHTML generar=new GeneradorHTML();
       clientes.add(correo);
       String cuerpo=generar.generdarOlvidoHTML(boleta, password,"MAC");
       enviarCorreo(Constants.ASUNTO_OLVIDO_CORREO_ELECTROINICO, cuerpo, clientes);
    }

    @Override
    public void enviarCorrreoRegistro(String correo,String boleta, String password, String mac) throws DAOException{
       List<String> clientes=new ArrayList<String>();
       GeneradorHTML generar=new GeneradorHTML();
       clientes.add(correo);
       String cuerpo=generar.generdarHTML(boleta,password, mac);
       enviarCorreo(Constants.ASUNTO_CORREO_ELECTROINICO, cuerpo, clientes);

    }
/*    public void EnviarConfimarCorreo(Cliente cliente){
        String nombreCliente="";
    if(cliente!=null){
        nombreCliente=cliente.getNombre() +" "+cliente.getPaterno()+" "+cliente.getMaterno();
        try{

           
            ExternalContext external = FacesContext.getCurrentInstance().getExternalContext();
            buffer=prepareUrl(external.getRequestContextPath());
            List<String> cliList=new ArrayList<String>();
            List<String> ckey=new ArrayList<String>();
            cliList.add(cliente.getId());
            Map<String,List<String>> map=new HashMap<String, List<String>>();
            List<String> clientemap=new ArrayList<String>();
            clientemap.add(cliente.getId());
            ckey.add(1+"");
            map.put("correo",clientemap);
            map.put("bandera",ckey);
            baseURL=external.encodeRedirectURL(buffer.toString(), map);
            GeneradorHTML generadorHTML=new GeneradorHTML();
            query= generadorHTML.generdarHTMLConfirmar(cliente.getId(),cliente.getPassword(),nombreCliente, baseURL);
            enviarCorreo("Activar Registro", query, cliList);
        }catch(Exception e){e.printStackTrace();}
        }
    }*/
    



}

